package datamodel.huffman.tree;

import datamodel.RGB;

public class TreeNode {
	
	private TreeNode parentNode = null;
	private TreeNode leftNode = null;
	private TreeNode rightNode = null;
	private int occurance = 0;
	private RGB rgb = null;
	
	// Verschiede Konstruktoren für einen Knoten
	/**
	 * Erzeugt einen Knoten ohne dabei den Vorgänger oder die Nachfolger zu setzen.
	 * @param rgb Die Farbe die der Knoten speichert
	 * @param occurance Die Häufigkeit der Farbe
	 */
	public TreeNode(RGB rgb, int occurance) {
		this.rgb = rgb;
		this.occurance = occurance;
	}
	
	/**
	 * Erzeugt einen Knoten neuen "leeren" Knoten mit der Häufigkeit seiner Nachfolger.
	 * @param occurance Die Gesamthäufigkeit
	 * @param leftNode Der linke Nachfolger
	 * @param rightNode Der rechte Nachfolger
	 */
	public TreeNode(int occurance, TreeNode leftNode, TreeNode rightNode) {
		this.occurance = occurance;
		this.leftNode = leftNode;
		this.rightNode = rightNode;
	}

	// getter und setter
	public int getOccurance() {
		return occurance;
	}

	public RGB getRgb() {
		return rgb;
	}
	
	public void setRgb(RGB rgb) {
		this.rgb = rgb;
	}
	
	public TreeNode getLeftNode() {
		return this.leftNode;
	}
	
	public void setLeftNode(TreeNode node) {
		this.leftNode = node;
	}
	
	public TreeNode getRightNode() {
		return this.rightNode;
	}
	
	public void setRightNode(TreeNode node) {
		this.rightNode = node;
	}

	// Abfragen über den Knoten
	public boolean hasLeftNode() {
		return this.leftNode != null;
	}
	
	public boolean hasRightNode() {
		return this.rightNode != null;
	}
	
	public boolean hasParentNode() {
		return this.parentNode != null;
	}
}
